#include "saveqx.h"

SaveQx::SaveQx()
{

}

void SaveQx::onWorking(const QString ip, const quint16 port, const QByteArray arr)
{
    if(!m_saveStatues || arr.isEmpty() || ip != m_srcIP) {
        return;
    }

    if(port == 60001) //黑体
    {
        if(arr[0]==0x01 && arr[1] == 0x03)
        {
            short nowtemp_x10 = arr[4]<<8 | arr[5];
            float nowtemp = nowtemp_x10/10.0;

            QString timeStr = QDateTime::currentDateTime().toString("yyyy-MM-dd:hh-mm-ss-zzz");
            saveData(QString("%1 黑体温度:%2").arg(timeStr).arg(nowtemp));
        }
    }
    if(port == 60002) //气象站
    {
        //            qDebug()<<"收到气象站信息"<<QTime::currentTime();//
        //            QByteArray datagram;
        //            while (qxz->hasPendingDatagrams()) {
        //                datagram.resize(qxz->pendingDatagramSize());
        //                qxz->readDatagram(datagram.data(),datagram.size());
        //                qDebug()<<datagram.data();

        //        qDebug()<<datagram[0];
        //        qDebug()<<datagram.data()[1];
        //        qDebug()<<datagram.data()[2];
        //        qDebug()<<datagram.data()[3];

        // Hex模式
        //        int *temp;
        //        char *dataChar;
        ////        dataChar[0] = datagram.data()[28];
        ////        dataChar[1] = datagram.data()[29];
        ////        dataChar[2] = datagram.data()[30];
        ////        dataChar[3] = datagram.data()[31];
        //        dataChar[0] = datagram.data()[0];
        //        dataChar[1] = datagram.data()[1];
        //        dataChar[2] = datagram.data()[2];
        //        dataChar[3] = datagram.data()[3];
        //        temp = reinterpret_cast<int*>(dataChar);
        //        ui->lineEdit_60->setText(QString::number(*temp));

        //ASCII模式
        QString str;
        str+= arr[32];
        str+= arr[33];
        str+= arr[34];
        str+= arr[35];
        QString wendu = QString::number(str.toInt()/10.0);//温度

        QString str1;
        str1+= arr[37];
        str1+= arr[38];
        str1+= arr[39];
        str1+= arr[40];
        QString shidu = QString::number(str1.toInt()/10.0);//湿度

        QString str2;
        str2+= arr[42];
        str2+= arr[43];
        str2+= arr[44];
        str2+= arr[45];
        str2+= arr[46];
        QString qiya = QString::number(str2.toInt()/10.0);//气压

        QString str3;
        str3+= arr[48];
        str3+= arr[49];
        str3+= arr[50];
        QString maxFensu = QString::number(str3.toInt()/10.0);//分钟最大风速

        QString str4;
        str4+= arr[52];
        str4+= arr[53];
        str4+= arr[54];
        str4+= arr[55];
        QString maxFengXiang = QString::number(str4.toInt()/10.0);//分钟最大风速对应风向

        QString str5;
        str5+= arr[75];
        str5+= arr[76];
        QString JSL = QString::number(str5.toInt()/10.0);   //分钟降水量

        QString timeStr = QDateTime::currentDateTime().toString("yyyy-MM-dd:hh-mm-ss-zzz");
        saveData(QString("%1 温度:%2,湿度:%3,气压:%4,分钟最大风速:%5,分钟最大风速对应风向:%6,分钟降水量:%7")
                 .arg(timeStr).arg(wendu).arg(shidu).arg(qiya).arg(maxFensu).arg(maxFengXiang).arg(JSL));
    }
    if(port == 60003) //能见度
    {
        //            qDebug()<<"收到能见度仪信息"<<QTime::currentTime();//每条97字节
        //            QByteArray datagram;
        //            while (njdy->hasPendingDatagrams()) {
        //                datagram.resize(njdy->pendingDatagramSize());
        //                njdy->readDatagram(datagram.data(),datagram.size());
        //        qDebug()<<datagram.data();
        //ASCII模式
        //                qDebug()<<datagram.data();
        QString str;
        str+= arr[28];
        str+= arr[29];
        str+= arr[30];
        str+= arr[31];
        str+= arr[32];
        qDebug()<<str<<"str";
        //ui->lineEdit_43->setText(QString::number(str.toInt()));//能见度
        QString NJD = QString::number(str.toInt());
        QString timeStr = QDateTime::currentDateTime().toString("yyyy-MM-dd:hh-mm-ss-zzz");
        saveData(QString("%1 温度:%2").arg(timeStr).arg(NJD));
    }
}

bool SaveQx::saveData(const QString &data) {
    if(!m_file.isOpen() || m_saveCount >= 1000) {
        createNewFile();
    }

    m_file.write(data.toUtf8());
    m_file.close();
    qDebug() << "完成一次Qx存储";
    return true;
}

void SaveQx::createNewFile()
{
    // 检查磁盘是否可用
    if (!checkAndSwitchDisk()) {
        return; // 所有磁盘不可用，直接返回
    }

    // 关闭当前文件
    if (m_file.isOpen()) {
        m_file.close();
    }

    // 构造完整文件路径：磁盘路径/基础路径/视频名称/文件名
    QString currentDisk = m_diskPaths[m_currentDiskIndex];
    QString fullDir = QString("%1/%2/%3").arg(currentDisk).arg(m_fileSavePath).arg(m_videoName);
    QDir dir(fullDir);
    if (!dir.exists() && !dir.mkpath(".")) { // 确保目录存在
        qDebug() << "无法创建目录:" << fullDir;
        return;
    }

    // 生成文件名（包含时间戳）
    m_fileStartTime = QDateTime::currentDateTime();
    QString fileName = QString("%1/%2_%3.h264")
            .arg(fullDir)
            .arg(m_desc)
            .arg(m_fileStartTime.toString("yyyy_MM_dd_hh_mm_ss"));

    m_file.setFileName(fileName);
    if (!m_file.open(QIODevice::WriteOnly)) {
        qDebug() << "无法创建文件:" << fileName << "错误:" << m_file.errorString();
        return;
    }

    qDebug() << "创建新文件: " << fileName;
}
